# 列表和元素组的概念


"""
变量就是内存空间，用来表示/存储数据，如果表示的数据少，直接定义几个变量就行了
也有时候，要表示的数据就比较多

在Python中，列表和元组(C++中的数组)，就是这样的机制，可以用一个变量来表示很多个数据

列表和元组，大部分的功能都是差不多的，但是有一个功能有非常明显的却别
列表是可变的：创建好了后，随时能改
元组是不可变的：创建好了之后，改变不了，要想改，只能丢弃旧的，搞个新的
"""

# 列表的创建和下标访问

"""
创建链表:
        1. 直接使用字面值来创建
         [] 就表示一个 空的列表
          a = []
        
        2. 使用list() 来创建
         b = list()

        3. 可以在创建链表的时候，在[] 中指定链表的初始值,元素之间用 , 来分割
           
         c = [1,2,3]
        
        4. 可以在同一个列表里面放不同类型的变量，
          c = [2, 35, 6, 7, 23.4, 'a', 'hello']
        
        5. 通过下标访问[]的方式获取到列表中元素,从0开始计算
          print(c[3])
          
        6. 使用下标来修改列表元素
          c[3] = 1000
         
        7. 超出下标有效范围，就会出现异常 
          a = [1, 3, 34]
          a[5] = 12  
          
        8. 可以使用内建函数len来获取列表长度(元素个数)，和字符串类似
          a = [1, 2, 4]
          print(len(a))    结果是3
          
        9. Python中的下标，其实还可以写成负数!!
           例如写成-1.其实就等价于 len(a)-1，或者理解为倒数第一个元素
           a = [1, 3, 4, 6, 3]
           print(a[len(a)-1])  结果是 3
           print(a[-1])        结果是 3
           
注：
    1. 在C++/Java里面要求一种数组只能存相同类型的变量，在Python里面的列表则无限制
   
    2. 把[]放到一个列表变量的后面，同时[]写上一个整数，此时它就是下标访问运算符，
       []中间写个整数，就是称为“下标”或者“索引”
    
    3. 由于下标是从0开始计算的，对于列表来说，下标的有效范围：从0.长度-1，
       当我们下标超出有效范围的时候，尝试访问就会出现异常!!!
       
    4. len 可以传字符串、列表、元组、字典、自定义类型......=> 原理：动态类型
"""

# a = []
# print(type(a))     # 是list类型
#
# b = list()
# print(type(b))     # 是list类型
#
#
# c = [2, 35, 6, 7, 23.4, 'a', 'hello']
# print(c[4])
# c[3] = 100
# print(c[3])
#
# a = [1, 2, 3]
# print(len(a))

a = [1, 3, 4, 6, 3]
print(a[len(a)-1])
print(a[-1])